// 封装网络请求代码
import axios from "axios";
import NProgress from "nprogress"; //引入进度条
import "nprogress/nprogress.css";
import { getToken } from "./auth";

export const serverUrl = "http://localhost:1337";

// axios.create创建一个实例
const instance = axios.create({
  baseURL: serverUrl, // 请求的基础地址，我们真实的请求地址是把他拼接在最前面
  timeout: "5000", // 超时时间
});

// 添加全局请求拦截器，发起请求之前执行
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // 此处加loading
    NProgress.start();
    config.headers.token = getToken();
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加全局响应拦截器，请求返回之后执行
// 可以对所有的请求做统一的处理，对状态码做处理
instance.interceptors.response.use(
  function (response) {
    NProgress.done();
    // Any status code that lie within the range of 2xx cause this function to trigger
    // 对响应数据做点什么
    // 删除loading
    return response.data;
  },
  function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // 对响应错误做点什么
    // 删除loading
    console.dir(error);
    if (error.message?.includes("timeout")) {
      alert("网络异常，请刷新");
    }
    NProgress.done();
    return Promise.reject(error);
  }
);

export const get = (url, params) => {
  return instance.get(url, { params });
};

export const post = (url, data) => instance.post(url, data);

export const del = (url) => instance.delete(url);

export const put = (url, data) => instance.put(url, data);
